草庐IT

Android StrictMode 和堆转储

全部标签

java - 有什么方法可以分析截断的 Java 堆转储(hprof 文件)?

在我的工作中,我们遇到了一个难以重现的OOM问题。或者,更准确地说,很容易在一个系统上重现,使该系统无法使用,但在其他任何地方都很难重现,只要输入相同。应用程序正在使用服务包装器作为服务运行。我们确实设法通过在OOM上输出堆转储文件的选项来更改配置以启动它,但不幸的是,它们被截断了,很可能是由于服务包装器超时并在写入文件时终止了进程。这很明显,因为最大内存设置为1GB,而hprof文件小到700MB,这对于OOM时的整个堆来说太小了。额外配置包装器以给java进程更长的时间来写出堆,这将需要很多步骤,但我们正在使用这两个选项来实现这一点:wrapper.jvm_exit.timeout

jmap 命令 : Premature EOF 的 Java 堆转储错误

我在执行以下命令时遇到以下异常jmap-dump:format=b,file=heap_dump.bin输出:DumpingheaptoExceptioninthread"main"java.io.IOException:PrematureEOFatsun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:248)atsun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:199)atsun.tools.attac

java - 以编程方式从命令行分析 HPROF 内存转储文件

我正在调查使用Eclipse的内存分析器(MAT)分析HPROF文件。支配树、报告和OQL界面看起来非常有用。但所有这些都必须通过MAT软件手动完成。是否有命令行界面,以便我可以通过编程方式解析HPROF并自动生成自定义报告。这将有助于将此集成到测试基础架构中以进行自动内存分析。顺便说一句,堆大小将在10-60MB之间。 最佳答案 ParseHeapDump.sh做你正在寻找的东西。至于后续问题,我不确定索引文件的存储格式。 关于java-以编程方式从命令行分析HPROF内存转储文件,我

java - 如何以编程方式转储 JMX 数据?

我希望能够记录所有可通过jconsole访问的JMX数据。有没有办法以编程方式执行此操作?我正在构建一种系统日志记录形式,我想使用类似于jconsole的工具创建可查看的间隔数据。我该怎么做? 最佳答案 java.lang.management.ManagementFactory使您可以访问JMX数据。例如ListmemPoolBeans=ManagementFactory.getMemoryPoolMXBeans();for(MemoryPoolMXBeanmpb:memPoolBeans){System.out.println(

java - 如何从运行 tomcat 7 获取堆转储的方法

我试过这个GetaheapdumponJVMfromTomcat6但这对我不起作用,还有其他方法可以从tomcat服务器获取堆转储吗?提前致谢! 最佳答案 获取堆转储的最简单方法是使用jmap.在有java进程的机器上执行jmap命令。使用示例:jmap-dump:file=/mnt/heapdump_2013-04-01.data 29842使用jps了解javaPid。你也可以通过jvisualvm进行堆转储.您可以通过jmx连接到远程机器或jstatd.您可以进行堆转储并存储在远程计算机上。要分析heapdumps可以建议你:

java - 从堆转储中的错误名称中查找 Java lambda

我正在寻找内存泄漏,堆转储显示许多lambda实例正在保存有问题的对象。lambda的名称是周围的类名,带有$$lambda$107在末尾。我还可以看到它有一个字段(这是它的正确名称),名为arg$1它引用填充堆的对象。不幸的是,我在这个类中有很多lambda,我想知道我能做些什么来缩小范围。我假设arg$1是一个隐式参数——lambda表达式中的一个自由变量,当lambda变成闭包时被捕获。那是对的吗?我也猜测107孤立地没有真正的帮助,但是我可以设置一些标志来记录哪个lambda表达式得到什么数字?还有其他有用的提示吗? 最佳答案

java - 在 Exception 上转储变量状态

我想知道是否有一种方法可以在出现异常时转储所有局部变量的状态,以便更好地了解导致异常的环境状态。下面的变量idsToDump在运行时是未知的,我想找出集合中的值导致NPE的状态。例子:publicstaticvoidmain(String[]args){HashMapemployees=newHashMap();employees.put(1,"James");Integer[]idsToDump=newInteger[]{1,2,3};for(IntegeremployeeId:idsToDump){Stringname=employees.get(employeeId).toLow

jvm - 是否可以指定 JVM 故障转储的位置?

我们有一个使用JNI的桌面应用程序偶尔会导致JVM崩溃。幸运的是,JVM会生成一个hs_err_pidXXXX.log文件,这对于调试此类错误非常有用。然而,它似乎总是转到当前工作目录,从那里挖掘它很烦人,因为我们的其他日志文件都转到特定的“日志文件位置”。是否可以为那些“故障转储”文件指定不同的位置?怎么办? 最佳答案 乔纳斯尽管HeapDumpPath适用于堆转储,但它不是您问题的答案。堆转储和jvm崩溃日志是两个独立的东西。要更改jvm崩溃日志的目标,请使用此选项运行java:-XX:ErrorFile=/path/to/fi

java - Java堆转储是否包括线程堆栈

我一直在使用Eclipse内存分析工具来检查堆转储。我还没有看到任何对象通过线程堆栈中的局部变量保持Activity状态的情况。Java线程堆栈是否保留在堆转储中?如果不是,这些对象是否在转储中被计为无法访问的对象?如果是这样,有什么方法可以保留线程堆栈,以便可以将未收集的垃圾与局部变量值区分开来? 最佳答案 是最近的JVM(截至2010年)的堆转储包括线程堆栈。EclipseMemoryAnalyzer0.8(2010年1月发布)包括对提取此信息的支持:http://www.eclipse.org/mat/0.8/notewort

java - 如何转储 HashMap 的内容?

如何转储JavaHashMap(或任何其他)的内容,例如转储到STDOUT?例如,假设我有一个具有以下结构的复杂HashMap:(student1=>Map(name=>Tim,Scores=>Map(math=>10,physics=>20,Computers=>30),place=>Miami,ranking=>Array(2,8,1,13),),student2=>Map(..............................),........................................................);所以我想把它打印到屏幕上,以便